import { error, fail, redirect } from '@sveltejs/kit'; import { db } from '$lib/server/db'; import { groceries, categories, references } from '$lib/server/db/schema'; import { eq } from 'drizzle-orm'; import type { Actions, PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ params }) => { const id = Number(params.id); const [item] = await db.select().from(groceries).where(eq(groceries.id, id)); if (!item) throw error(404, 'Item not found'); const [cat] = item.categoryId ? await db .select() .from(categories) .where(eq(categories.id, item.categoryId)) : [null]; const refs = await db .select() .from(references) .where(eq(references.groceryId, id)); return { item: { ...item, categoryName: cat?.name ?? null, }, references: refs, }; }; export const actions: Actions = { add: async ({ request, params }) => { const data = await request.formData(); const brand = data.get('brand')?.toString().trim(); const price = data.get('price')?.toString().trim(); const unit = data.get('unit')?.toString().trim(); const qualityScore = data.get('quality_score')?.toString().trim(); if (!brand) { return fail(400, { error: 'Brand is required' }); } await db.insert(references).values({ groceryId: Number(params.id), brand, price: price ? Number(price) : null, unit: unit || null, qualityScore: qualityScore ? Number(qualityScore) : null, }); return { success: true }; }, delete: async ({ request }) => { const data = await request.formData(); const id = Number(data.get('id')); await db.delete(references).where(eq(references.id, id)); return { success: true }; }, deleteItem: async ({ params }) => { await db.delete(groceries).where(eq(groceries.id, Number(params.id))); throw redirect(303, '/'); }, };